<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>Oct25-X</title><meta name="author" content="Oct25-X"><meta name="copyright" content="Oct25-X"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta property="og:type" content="website">
<meta property="og:title" content="Oct25-X">
<meta property="og:url" content="https://oct25-x.atomgit.net/oct25-xxxxx/page/3/index.html">
<meta property="og:site_name" content="Oct25-X">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://oct25-x.atomgit.net/oct25-xxxxx/img/avatar.jpg">
<meta property="article:author" content="Oct25-X">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://oct25-x.atomgit.net/oct25-xxxxx/img/avatar.jpg"><link rel="shortcut icon" href="/oct25-xxxxx/img/logo.jpg"><link rel="canonical" href="https://oct25-x.atomgit.net/oct25-xxxxx/page/3/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/oct25-xxxxx/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = { 
  root: '/oct25-xxxxx/',
  algolia: undefined,
  localSearch: {"path":"search.json","languages":{"hits_empty":"找不到您查询的内容：${query}"}},
  translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
  noticeOutdate: undefined,
  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
  copy: {
    success: '复制成功',
    error: '复制错误',
    noSupport: '浏览器不支持'
  },
  relativeDate: {
    homepage: false,
    post: false
  },
  runtime: '',
  date_suffix: {
    just: '刚刚',
    min: '分钟前',
    hour: '小时前',
    day: '天前',
    month: '个月前'
  },
  copyright: undefined,
  lightbox: 'fancybox',
  Snackbar: undefined,
  source: {
    justifiedGallery: {
      js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.js',
      css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.css'
    }
  },
  isPhotoFigcaption: false,
  islazyload: false,
  isAnchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
  title: 'Oct25-X',
  isPost: false,
  isHome: true,
  isHighlightShrink: false,
  isToc: false,
  postUpdate: '2024-05-19 17:27:58'
}</script><noscript><style type="text/css">
  #nav {
    opacity: 1
  }
  .justified-gallery img {
    opacity: 1
  }

  #recent-posts time,
  #post-meta time {
    display: inline !important
  }
</style></noscript><script>(win=>{
    win.saveToLocal = {
      set: function setWithExpiry(key, value, ttl) {
        if (ttl === 0) return
        const now = new Date()
        const expiryDay = ttl * 86400000
        const item = {
          value: value,
          expiry: now.getTime() + expiryDay,
        }
        localStorage.setItem(key, JSON.stringify(item))
      },

      get: function getWithExpiry(key) {
        const itemStr = localStorage.getItem(key)

        if (!itemStr) {
          return undefined
        }
        const item = JSON.parse(itemStr)
        const now = new Date()

        if (now.getTime() > item.expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return item.value
      }
    }
  
    win.getScript = url => new Promise((resolve, reject) => {
      const script = document.createElement('script')
      script.src = url
      script.async = true
      script.onerror = reject
      script.onload = script.onreadystatechange = function() {
        const loadState = this.readyState
        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
        script.onload = script.onreadystatechange = null
        resolve()
      }
      document.head.appendChild(script)
    })
  
      win.activateDarkMode = function () {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      win.activateLightMode = function () {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }
      const t = saveToLocal.get('theme')
    
          if (t === 'dark') activateDarkMode()
          else if (t === 'light') activateLightMode()
        
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        if (asideStatus === 'hide') {
          document.documentElement.classList.add('hide-aside')
        } else {
          document.documentElement.classList.remove('hide-aside')
        }
      }
    
    const detectApple = () => {
      if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
        document.documentElement.classList.add('apple')
      }
    }
    detectApple()
    })(window)</script><link rel="stylesheet" href="/css/rightMenu.css"><meta name="generator" content="Hexo 6.1.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/oct25-xxxxx/img/avatar.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data is-center"><div class="data-item"><a href="/oct25-xxxxx/archives/"><div class="headline">文章</div><div class="length-num">52</div></a></div><div class="data-item"><a href="/oct25-xxxxx/tags/"><div class="headline">标签</div><div class="length-num">17</div></a></div><div class="data-item"><a href="/oct25-xxxxx/categories/"><div class="headline">分类</div><div class="length-num">8</div></a></div></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/oct25-xxxxx/img/bg.png')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/oct25-xxxxx/">Oct25-X</a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">Oct25-X</h1><div id="site-subtitle"><span id="subtitle"></span></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/10/20/32Spring%E5%AE%89%E5%85%A8%E6%A1%86%E6%9E%B6SpringSecurity/" title="Spring 安全框架 SpringSecurity"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt32.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="Spring 安全框架 SpringSecurity"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/10/20/32Spring%E5%AE%89%E5%85%A8%E6%A1%86%E6%9E%B6SpringSecurity/" title="Spring 安全框架 SpringSecurity">Spring 安全框架 SpringSecurity</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-10-20T05:12:52.000Z" title="发表于 2023-10-20 13:12:52">2023-10-20</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%BB%84%E4%BB%B6/">微服务组件</a></span></div><div class="content">SpringSecurity 概述一、简介Spring Security 是 Spring 家族中的成员。Spring Security 基于 Spring 框架，提供了一套 Web 应用安全性的完整解决方案。
一般来说，Web 应用的安全性包括用户谁（Authtication）和用户授权（Authorization）两个部分，这也是 Spring Security 重要核心功能。

认证：验证当前访问系统的是不是本系统的用户，并且确认具体是哪个用户
授权：判断登录后用户是否有权限进行某个操作

二、官方网站官方网站：https://spring.io/projects/spring-security
中文文档：https://www.springcloud.cc/spring-security.html
SpringSecurity 入门案例一、创建工程&lt;groupId&gt;com.example&lt;/groupId&gt;12&lt;groupId&gt;com.example&lt;/groupId&gt;&lt;artifactId&gt;security-demo ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/10/13/31%E5%88%86%E5%B8%83%E5%BC%8F%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97RabbitMQ/" title="分布式消息队列 RabbitMQ"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt31.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="分布式消息队列 RabbitMQ"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/10/13/31%E5%88%86%E5%B8%83%E5%BC%8F%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97RabbitMQ/" title="分布式消息队列 RabbitMQ">分布式消息队列 RabbitMQ</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-10-13T00:56:09.000Z" title="发表于 2023-10-13 08:56:09">2023-10-13</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6/">消息中间件</a></span></div><div class="content">消息队列一、什么是 MQMQ(message queue)，从字面意思上看，本质是个队列，FIFO 先入先出，只不过队列中存放的内容是 message 而已，还是一种跨进程的通信机制，用于上下游传递消息。在互联网架构中，MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后，消息发送上游只需要依赖 MQ，不用依赖其他服务。
二、为什么使用 MQ
流量消峰
应用解耦



异步处理


三、MQ 的分类ActiveMQ
优点：单机吞吐量量万级，时效性 ms 级，可用性高，基于主从架构实现高可用性，消息可靠性较低的概率丢失数据
缺点：官方社区现在对 ActiveMQ 5.x 维护越来越少，高吞吐量场景较少使用。

Kafka数据库杀手锏，为大数据而生的消息中间件，以其百万级 TPS 的吞吐量名声大噪，在数据采集、传输、存储的过程中发挥着举足轻重的作用

优点：分布式，性能卓越，吞吐量高，时效性 ms 级，能保证所有消息被精准消费一次
缺点：Kafka 单机 超过64个队列&#x2F;分区，Load 会发生明显飙高现象，队列越多，Load 越高，发送消息响应时间 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/10/12/30%E5%88%86%E5%B8%83%E5%BC%8F%E8%B0%83%E5%BA%A6%E5%B9%B3%E5%8F%B0%20XXL-JOB/" title="分布式调度平台 XXL-JOB"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt30.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="分布式调度平台 XXL-JOB"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/10/12/30%E5%88%86%E5%B8%83%E5%BC%8F%E8%B0%83%E5%BA%A6%E5%B9%B3%E5%8F%B0%20XXL-JOB/" title="分布式调度平台 XXL-JOB">分布式调度平台 XXL-JOB</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-10-12T02:56:09.000Z" title="发表于 2023-10-12 10:56:09">2023-10-12</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6/">任务调度</a></span></div><div class="content">概述一、XXL-JOB 是什么？XXL-JOB 是一个分布式任务调度平台，其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线，开箱即用。
二、官方文档与下载官方文档XXL-JOB 官网&#x2F;文档：www.xuxueli.com/xxl-job/
源码仓库地址XXL-JOB 源码地址：

GitHub：github.com&#x2F;xuxueli&#x2F;xxl…
码云：gitee.com&#x2F;xuxueli0323…

直接到 GitHub&#x2F;码云将项目源码下载到本地，并解压到指定目录即可，解压后的项目结构如下：
12345xxl-job-admin：调度中心xxl-job-core：公共依赖xxl-job-executor-samples：执行器示例    xxl-job-executor-sample-springboot：SpringBoot 版本，通过 SpringBoot 管理执行器    xxl-job-executor-sample-frameless：无框架版本

环境
Mave3+
JDK1.8+
MyS ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/09/19/26%E6%96%87%E6%A1%A3%E6%95%B0%E6%8D%AE%E5%BA%93%20MongoDB_04%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%9B%B8%E5%85%B3/" title="文档数据库 MongoDB_04性能优化相关"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt26.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="文档数据库 MongoDB_04性能优化相关"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/09/19/26%E6%96%87%E6%A1%A3%E6%95%B0%E6%8D%AE%E5%BA%93%20MongoDB_04%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%9B%B8%E5%85%B3/" title="文档数据库 MongoDB_04性能优化相关">文档数据库 MongoDB_04性能优化相关</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-09-19T08:22:18.000Z" title="发表于 2023-09-19 16:22:18">2023-09-19</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/NoSQL%E6%95%B0%E6%8D%AE%E5%BA%93/">NoSQL数据库</a></span></div><div class="content">MongoDB 性能优化对于 MongoDB 的优化可以从以下几个方面入手：

找出查询慢的语句，使用 explain() 分析
创建索引
限定返回结果，使用 limit()&#x2F;skip()
对于查询结果，只查询使用到的字段，使用 find() 方法中的 projection 控制查询结果字段
开启 profiling 优化器，记录查询时间超出指定时间的慢查询
使用 MongoTools 工具，其中 mongostat&#x2F;mongotop 两个工具可以对 MongoDB 状态进行监控

explain() 执行计划首先，对于一个执行计划来说，重点主要查看以下几部分：
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/09/18/25%E6%96%87%E6%A1%A3%E6%95%B0%E6%8D%AE%E5%BA%93%20MongoDB_03SpringBoot%E6%95%B4%E5%90%88MongoDB/" title="文档数据库 MongoDB_03SpringBoot整合MongoDB"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt25.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="文档数据库 MongoDB_03SpringBoot整合MongoDB"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/09/18/25%E6%96%87%E6%A1%A3%E6%95%B0%E6%8D%AE%E5%BA%93%20MongoDB_03SpringBoot%E6%95%B4%E5%90%88MongoDB/" title="文档数据库 MongoDB_03SpringBoot整合MongoDB">文档数据库 MongoDB_03SpringBoot整合MongoDB</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-09-18T02:10:16.000Z" title="发表于 2023-09-18 10:10:16">2023-09-18</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/NoSQL%E6%95%B0%E6%8D%AE%E5%BA%93/">NoSQL数据库</a></span></div><div class="content">SpringBoot 整合 MongoDB：导包及配置一、导入相关依赖1234&lt;dependency&gt;    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;    &lt;artifactId&gt;spring-boot-starter-data-mongodb&lt;/artifactId&gt;&lt;/dependency&gt;

二、配置文件12345678910server:  port: 8081spring:  application:    name: mongorepository  data:    mongodb:      #本地      uri: mongodb://127.0.0.1:27017/test

连接其他情况：

本机无验证

1234spring:  data:    mongodb:      uri: mongodb://127.0.0.1:27017/test


本机需要验证

1234spring:  data:    mongodb:      uri ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/09/09/24%E6%96%87%E6%A1%A3%E6%95%B0%E6%8D%AE%E5%BA%93%20MongoDB_02%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2/" title="文档数据库 MongoDB_02集群部署"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt24.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="文档数据库 MongoDB_02集群部署"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/09/09/24%E6%96%87%E6%A1%A3%E6%95%B0%E6%8D%AE%E5%BA%93%20MongoDB_02%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2/" title="文档数据库 MongoDB_02集群部署">文档数据库 MongoDB_02集群部署</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-09-09T01:10:16.000Z" title="发表于 2023-09-09 09:10:16">2023-09-09</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/NoSQL%E6%95%B0%E6%8D%AE%E5%BA%93/">NoSQL数据库</a></span></div><div class="content">MongoDB 副本集群MongoDB 中的副本集是一组维护相同数据集的 mongod 进程。副本集提供冗余和高可用性，是所有生产部署的基础。
冗余和高可用性：复制提供了冗余并提高了数据可用性。对于不同数据库服务器上的多个数据副本，复制提供了针对单个数据库服务器丢失的容错级别。
一、MongoDB 中的副本集副本集是维护相同数据集的一级 mongod 实例。副本集包含多个数据承载节点和可选的一个仲裁器节点。在数据承载节点中，只有一个成员被视为 primary node，而其他节点被视为 secondary node。
primary node 接收所有写入操作。primary node 数据库在其操作日志（即 oplog）中记录对其数据集的所有更改。secondary node 服务器会在异步进程中将 primary node 服务器的 oplog 中的操作应用于自己的数据集。

如果 primary node 不可用时，将会从 secondary node 中进行选举，选举出新的 primary node
在某些情况下（例如由于成本限制，只允许有一个primary node 和 一个 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/09/03/29CentOS7%20%E4%BD%BF%E7%94%A8%20yum%20%E5%BF%AB%E9%80%9F%E5%AE%89%E8%A3%85%20MySQL8/" title="CentOS7 使用 yum 快速安装 MySQL8"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt29.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="CentOS7 使用 yum 快速安装 MySQL8"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/09/03/29CentOS7%20%E4%BD%BF%E7%94%A8%20yum%20%E5%BF%AB%E9%80%9F%E5%AE%89%E8%A3%85%20MySQL8/" title="CentOS7 使用 yum 快速安装 MySQL8">CentOS7 使用 yum 快速安装 MySQL8</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-09-03T07:10:16.000Z" title="发表于 2023-09-03 15:10:16">2023-09-03</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E9%9A%8F%E7%AC%94/">随笔</a></span></div><div class="content">安装 MySQL8一、准备
卸载已安装的 MySQL

1234sudo rpm -qa | grep mysql#如果有已安装的mysql，可以使用下面命令进行卸载sudo rpm -qa | grep mysql | xargs sudo rpm -e --nodeps 


MySQL 目录检查

1234567sudo find / -name mysql/etc/selinux/targeted/active/modules/100/mysql/usr/lib64/mysql/usr/share/mysql#如果有mysql目录，可以使用下面命令删除sudo find / -name mysql | xargs sudo rm -rf 


添加DNS

12345sudo vim /etc/resolv.conf#添加配置nameserver 114.114.114.114nameserver 8.8.8.8

二、安装 MySQL8
下载 rpm 文件

1sudo yum -y localinstall https://repo.mysql.com//mysql80-c ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/09/02/23%E6%96%87%E6%A1%A3%E6%95%B0%E6%8D%AE%E5%BA%93%20MongoDB_01%E6%A6%82%E8%BF%B0%E4%B8%8E%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/" title="文档数据库 MongoDB_01概述与基本使用"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt23.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="文档数据库 MongoDB_01概述与基本使用"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/09/02/23%E6%96%87%E6%A1%A3%E6%95%B0%E6%8D%AE%E5%BA%93%20MongoDB_01%E6%A6%82%E8%BF%B0%E4%B8%8E%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/" title="文档数据库 MongoDB_01概述与基本使用">文档数据库 MongoDB_01概述与基本使用</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-09-02T07:33:16.000Z" title="发表于 2023-09-02 15:33:16">2023-09-02</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/NoSQL%E6%95%B0%E6%8D%AE%E5%BA%93/">NoSQL数据库</a></span></div><div class="content">NoSQL 概述一、什么是  NoSQLNoSQL (Not-only-SQL，不只是SQL)，泛指非关系型的数据库。是对不同于传统的关系型数据库的数据库管理系统的统称。
二、NoSQL特点：方便扩展（数据之间没有关系，可以随意扩展）
大数据量，高性能，读写速度很快
数据类型是多样性的（不需要事先设计数据库，随取随用）
高可用，可以比较方便的实现高可用架构
三、NoSQL 分类缓存数据库：Redis、Memcached
文档数据库：MongoDB
列式数据库：HBase、Cassandra
图关系数据库：ZNeo4j
MongoDB 简介一、什么是 MongoDBMongoDB 是由C++语言编写的，是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下，添加更多的节点，可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一种文档数据库，是将数据存储为一个文档，数据结构由键值(key&#x3D;&gt;value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档，数组及文档数组。

二、与关系型数 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/09/02/28Redis-%E8%AE%BE%E7%BD%AE%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF/" title="Redis 设置开机自启"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt28.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="Redis 设置开机自启"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/09/02/28Redis-%E8%AE%BE%E7%BD%AE%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF/" title="Redis 设置开机自启">Redis 设置开机自启</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-09-02T01:10:16.000Z" title="发表于 2023-09-02 09:10:16">2023-09-02</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E9%9A%8F%E7%AC%94/">随笔</a></span></div><div class="content">Redis 开机自启一、配置文件 redis.conf在redis安装目录中，找到redis.conf配置文件，需要关注一下下面两个配置项：

daemonize：是否作为守护进程运行，默认false，可以修改为true
pidfile：默认值pidfile /var/run/redis_6379.pid，表示当 Redis 服务进程以守护进程方式运行时，Redis 服务进程默认会把 pid 写入文件 &#x2F;var&#x2F;run&#x2F;redis_6379.pid。该文件在 Redis 服务运行时存在，Redis 服务一旦停止，该文件就会自动被删除，因此可以用来判断 Redis 服务是否正在运行。该配置项可以不用修改


其他配置项根据自己需求修改，如bind、daemon等

创建软链接
1ln -s /opt/model/redis-7.0.8/redis.conf /etc/redis/6379.conf

二、redis 启动脚本Redis 开机自启需要一个启动脚本，该脚本在 Redis 源码（安装目录）已经提供
初始化脚本：&#x2F;opt&#x2F;modu ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/08/27/27%E5%88%86%E5%B8%83%E5%BC%8F%E6%B6%88%E6%81%AF%E7%B3%BB%E7%BB%9F%20Kafka/" title="分布式消息系统 Kafka"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt27.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="分布式消息系统 Kafka"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/08/27/27%E5%88%86%E5%B8%83%E5%BC%8F%E6%B6%88%E6%81%AF%E7%B3%BB%E7%BB%9F%20Kafka/" title="分布式消息系统 Kafka">分布式消息系统 Kafka</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-08-27T03:12:39.000Z" title="发表于 2023-08-27 11:12:39">2023-08-27</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6/">消息中间件</a></span></div><div class="content">Kafka 概述一、定义Kafka 是一个分布式的基于发布&#x2F;订阅模式的消息队列，主要应用于大数据实时处理领域。
二、消息队列（Message Queue）消息队列的两种模式
点对点模式（一对一，消费者主动拉取数据，消息收到后消息清除）

消息生产者生产消息发送到 Queue 中，然后消息消费者从 Queue 中取出并且消费消息。
消息被消费以后，Queue 中不再有存储，所以消息消费者不可能消费到已经被消费的消息。
Queue 支持存在多个消费者，但是对一个消息而言，只会有一个消费者可以消费。


发布&#x2F;订阅模式（一对多，消费者消费数据之后不会清除消息）

消息生产者（发布）将消息发布到 Topic 中，同时有多个消息消费者（订阅）消费该消息。
和点对点方式不同，发布到 Topic 的消息会被所有订阅者消费。

三、Kafka 基础架构

为了方便扩展，提高吞吐量，一个 Topic 分为多个 partition，每个分区存储不同的数据；
为了配合分区的设计，提出消费都组的概念，每个消费者组有多个消费者，并行消费；
一个消费者消费一个 Topic 的一个 partit ...</div></div></div><nav id="pagination"><div class="pagination"><a class="extend prev" rel="prev" href="/oct25-xxxxx/page/2/#content-inner"><i class="fas fa-chevron-left fa-fw"></i></a><a class="page-number" href="/oct25-xxxxx/">1</a><a class="page-number" href="/oct25-xxxxx/page/2/#content-inner">2</a><span class="page-number current">3</span><a class="page-number" href="/oct25-xxxxx/page/4/#content-inner">4</a><span class="space">&hellip;</span><a class="page-number" href="/oct25-xxxxx/page/6/#content-inner">6</a><a class="extend next" rel="next" href="/oct25-xxxxx/page/4/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/oct25-xxxxx/img/avatar.jpg" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">Oct25-X</div><div class="author-info__description"></div></div><div class="card-info-data is-center"><div class="card-info-data-item"><a href="/oct25-xxxxx/archives/"><div class="headline">文章</div><div class="length-num">52</div></a></div><div class="card-info-data-item"><a href="/oct25-xxxxx/tags/"><div class="headline">标签</div><div class="length-num">17</div></a></div><div class="card-info-data-item"><a href="/oct25-xxxxx/categories/"><div class="headline">分类</div><div class="length-num">8</div></a></div></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/xxxxxx"><i class="fab fa-github"></i><span>Follow Me</span></a></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/24/52%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala09_%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2%E3%80%81%E5%BC%82%E5%B8%B8%E5%92%8C%E6%B3%9B%E5%9E%8B/" title="大数据之多范式编程语言 Scala09_隐式转换、异常和泛型"><img src="/oct25-xxxxx/img/cover_img/ctt52.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala09_隐式转换、异常和泛型"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/24/52%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala09_%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2%E3%80%81%E5%BC%82%E5%B8%B8%E5%92%8C%E6%B3%9B%E5%9E%8B/" title="大数据之多范式编程语言 Scala09_隐式转换、异常和泛型">大数据之多范式编程语言 Scala09_隐式转换、异常和泛型</a><time datetime="2024-02-24T04:55:34.000Z" title="发表于 2024-02-24 12:55:34">2024-02-24</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/24/51%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala08_%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D/" title="大数据之多范式编程语言 Scala08_模式匹配"><img src="/oct25-xxxxx/img/cover_img/ctt51.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala08_模式匹配"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/24/51%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala08_%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D/" title="大数据之多范式编程语言 Scala08_模式匹配">大数据之多范式编程语言 Scala08_模式匹配</a><time datetime="2024-02-24T00:46:12.000Z" title="发表于 2024-02-24 08:46:12">2024-02-24</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/22/50%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala07_%E9%9B%86%E5%90%88/" title="大数据之多范式编程语言 Scala07_集合"><img src="/oct25-xxxxx/img/cover_img/ctt50.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala07_集合"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/22/50%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala07_%E9%9B%86%E5%90%88/" title="大数据之多范式编程语言 Scala07_集合">大数据之多范式编程语言 Scala07_集合</a><time datetime="2024-02-22T08:16:10.000Z" title="发表于 2024-02-22 16:16:10">2024-02-22</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/21/49%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala06_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/" title="大数据之多范式编程语言 Scala06_面向对象"><img src="/oct25-xxxxx/img/cover_img/ctt49.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala06_面向对象"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/21/49%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala06_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/" title="大数据之多范式编程语言 Scala06_面向对象">大数据之多范式编程语言 Scala06_面向对象</a><time datetime="2024-02-21T07:01:10.000Z" title="发表于 2024-02-21 15:01:10">2024-02-21</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/20/48%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala05_%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/" title="大数据之多范式编程语言 Scala05_函数式编程"><img src="/oct25-xxxxx/img/cover_img/ctt48.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala05_函数式编程"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/20/48%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala05_%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/" title="大数据之多范式编程语言 Scala05_函数式编程">大数据之多范式编程语言 Scala05_函数式编程</a><time datetime="2024-02-20T12:05:11.000Z" title="发表于 2024-02-20 20:05:11">2024-02-20</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
            <i class="fas fa-folder-open"></i>
            <span>分类</span>
            
            </div>
            <ul class="card-category-list" id="aside-cat-list">
            <li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/NoSQL%E6%95%B0%E6%8D%AE%E5%BA%93/"><span class="card-category-list-name">NoSQL数据库</span><span class="card-category-list-count">5</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6/"><span class="card-category-list-name">任务调度</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/"><span class="card-category-list-name">大数据组件</span><span class="card-category-list-count">16</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E5%AE%B9%E5%99%A8%E5%8C%96/"><span class="card-category-list-name">容器化</span><span class="card-category-list-count">6</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%BB%84%E4%BB%B6/"><span class="card-category-list-name">微服务组件</span><span class="card-category-list-count">7</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6/"><span class="card-category-list-name">消息中间件</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/"><span class="card-category-list-name">编程语言</span><span class="card-category-list-count">9</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E9%9A%8F%E7%AC%94/"><span class="card-category-list-name">随笔</span><span class="card-category-list-count">5</span></a></li>
            </ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/oct25-xxxxx/tags/DataX/" style="font-size: 1.1em; color: #999">DataX</a> <a href="/oct25-xxxxx/tags/Docker/" style="font-size: 1.37em; color: #99a4b2">Docker</a> <a href="/oct25-xxxxx/tags/Elasticsearch/" style="font-size: 1.1em; color: #999">Elasticsearch</a> <a href="/oct25-xxxxx/tags/Flume/" style="font-size: 1.17em; color: #999c9f">Flume</a> <a href="/oct25-xxxxx/tags/Hadoop/" style="font-size: 1.43em; color: #99a6b9">Hadoop</a> <a href="/oct25-xxxxx/tags/Hive/" style="font-size: 1.3em; color: #99a1ac">Hive</a> <a href="/oct25-xxxxx/tags/Kafka/" style="font-size: 1.1em; color: #999">Kafka</a> <a href="/oct25-xxxxx/tags/MongoDB/" style="font-size: 1.23em; color: #999ea6">MongoDB</a> <a href="/oct25-xxxxx/tags/MySQL/" style="font-size: 1.1em; color: #999">MySQL</a> <a href="/oct25-xxxxx/tags/RabbitMQ/" style="font-size: 1.1em; color: #999">RabbitMQ</a> <a href="/oct25-xxxxx/tags/Redis/" style="font-size: 1.23em; color: #999ea6">Redis</a> <a href="/oct25-xxxxx/tags/Scala/" style="font-size: 1.5em; color: #99a9bf">Scala</a> <a href="/oct25-xxxxx/tags/SpringCloud/" style="font-size: 1.3em; color: #99a1ac">SpringCloud</a> <a href="/oct25-xxxxx/tags/SpringSecurity/" style="font-size: 1.1em; color: #999">SpringSecurity</a> <a href="/oct25-xxxxx/tags/XXL-JOB/" style="font-size: 1.1em; color: #999">XXL-JOB</a> <a href="/oct25-xxxxx/tags/Zookeeper/" style="font-size: 1.1em; color: #999">Zookeeper</a> <a href="/oct25-xxxxx/tags/ubuntu/" style="font-size: 1.1em; color: #999">ubuntu</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span><a class="card-more-btn" href="/oct25-xxxxx/archives/" title="查看更多">
    <i class="fas fa-angle-right"></i></a></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2024/02/"><span class="card-archive-list-date">二月 2024</span><span class="card-archive-list-count">9</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2024/01/"><span class="card-archive-list-date">一月 2024</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/12/"><span class="card-archive-list-date">十二月 2023</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/11/"><span class="card-archive-list-date">十一月 2023</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/10/"><span class="card-archive-list-date">十月 2023</span><span class="card-archive-list-count">5</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/09/"><span class="card-archive-list-date">九月 2023</span><span class="card-archive-list-count">6</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/08/"><span class="card-archive-list-date">八月 2023</span><span class="card-archive-list-count">6</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/07/"><span class="card-archive-list-date">七月 2023</span><span class="card-archive-list-count">8</span></a></li></ul></div></div></div></main><footer id="footer" style="background-image: url('/oct25-xxxxx/img/bg.png')"><div id="footer-wrap"><div class="copyright">&copy;2020 - 2024 By Oct25-X</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="translateLink" type="button" title="简繁转换">繁</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">本地搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span>  数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><hr/><div id="local-search-results"></div></div></div><div id="search-mask"></div></div><div id="rightMenu"><div class="rightMenu-group rightMenu-small"><div class="rightMenu-item" id="menu-backward"><i class="fa-solid fa-arrow-left"></i></div><div class="rightMenu-item" id="menu-forward"><i class="fa-solid fa-arrow-right"></i></div><div class="rightMenu-item" id="menu-refresh"><i class="fa-solid fa-arrow-rotate-right"></i></div><div class="rightMenu-item" id="menu-home"><i class="fa-solid fa-house"></i></div></div><div class="rightMenu-group rightMenu-line rightMenuOther"><a class="rightMenu-item menu-link" href="/archives/"><i class="fa-solid fa-archive"></i><span>文章归档</span></a><a class="rightMenu-item menu-link" href="/categories/"><i class="fa-solid fa-folder-open"></i><span>文章分类</span></a><a class="rightMenu-item menu-link" href="/tags/"><i class="fa-solid fa-tags"></i><span>文章标签</span></a></div><div class="rightMenu-group rightMenu-line rightMenuNormal"><a class="rightMenu-item" id="menu-translate"><i class="fa-solid fa-earth-asia"></i><span>繁简切换</span></a><div class="rightMenu-item" id="menu-darkmode"><i class="fa-solid fa-moon"></i><span>切换模式</span></div></div></div><div id="rightmenu-mask"></div><div><script src="/oct25-xxxxx/js/utils.js"></script><script src="/oct25-xxxxx/js/main.js"></script><script src="/oct25-xxxxx/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.umd.js"></script><script src="/oct25-xxxxx/js/search/local-search.js"></script><div class="js-pjax"><script>function subtitleType () {
  if (true) { 
    window.typed = new Typed("#subtitle", {
      strings: ["每一个不曾起舞的日子&#44; 都是对生活的辜负 !","Never put off till tomorrow what you can do today.","成熟的人眼里满是前途&#44; 稚嫩的人眼里满是爱恨情仇 !","Keep Writing and Keep Loving.","今日事&#44; 今日畢"],
      startDelay: 300,
      typeSpeed: 150,
      loop: true,
      backSpeed: 50
    })
  } else {
    document.getElementById("subtitle").innerHTML = '每一个不曾起舞的日子&#44; 都是对生活的辜负 !'
  }
}

if (true) {
  if (typeof Typed === 'function') {
    subtitleType()
  } else {
    getScript('https://cdn.jsdelivr.net/npm/typed.js/lib/typed.min.js').then(subtitleType)
  }
} else {
  subtitleType()
}</script></div><script defer src="https://npm.elemecdn.com/jquery@latest/dist/jquery.min.js"></script><script defer data-pjax src="/js/rightMenu.js"></script><script defer="defer" id="ribbon" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-ribbon.min.js" size="150" alpha="0.6" zIndex="-1" mobile="false" data-click="true"></script><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/activate-power-mode.min.js"></script><script>POWERMODE.colorful = true;
POWERMODE.shake = true;
POWERMODE.mobile = false;
document.body.addEventListener('input', POWERMODE);
</script><script id="click-heart" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/click-heart.min.js" async="async" mobile="false"></script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>